"""
需求：
    定义生成器函数，在员工列表中查找所有部门是9001的员工
    定义生成器函数： 在员工列表中查找所有姓名是2个字的员工
"""

class Employee:
    def __init__(self,eid,name,did,salary):
        self.eid=eid # 员工编号
        self.name=name
        self.did=did  # 部门编号
        self.salary=salary

    def __repr__(self):
        return f'Employee(eid={self.eid},name={self.name},did={self.did},salary={self.salary})'

employees = [
    Employee(1001,'茹凤',9002,16000),
    Employee(1002,'韩耀祖',9001,19000),
    Employee(1003,'谭新宇',9003,20000),
    Employee(1004,'千琪',9004,30000),
    Employee(1005,'李欣桐',9001,40000),

]

# 传统方式
# 定义生成器函数，在员工列表中查找所有部门是9001的员工
def find_by_dept():
    for emp in employees:
        if emp.did == 9001:
            yield emp

# 定义生成器函数： 在员工列表中查找所有姓名是2个字的员工
def find_by_name_len():
    for emp in employees:
        if len(emp.name) == 2:
            yield emp

#for emp in  find_by_dept():
for emp in find_by_name_len():
    print(emp)

print('-' * 30)

# 函数式编程

# 1. 定义回调函数 在员工列表中查找所有部门是9001的员工
def condition1(employee):
    return employee.did == 9001

#  在员工列表中查找所有姓名是2个字的员工
def condition2(employee):
    return len(employee.name) == 2

# 2.  定义高阶函数
def find_all(condition):
    for emp in employees:
        if condition(emp):
            yield emp

for emp in find_all(condition2):
    print(emp)